iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
自我挑戰組

從免費網路資源中入門java系列 第 16

【Day16】Java - 類別的繼承(二) - super關鍵字

  • 分享至 

  • xImage
  •  

如果一個類別繼承了另一個類別,那麼被繼承的那個類別就稱為「superclass」(父類別),而繼承它的類別稱為「subclass」(子類別)。

本篇要來介紹一下super這個關鍵字的用途。

super 關鍵字主要有以下用途:
1. 取得父類別的屬性(欄位): 在子類別中,如果存在與父類別同名的欄位,可以使用 super.欄位名稱 來明確訪問父類別的欄位,以避免混淆。
2. 呼叫父類別的方法: 子類別可以使用 super.方法名稱() 來調用父類別的方法。
3. 在子類別建構式中呼叫父類別的建構式: 在子類別的建構式中,可以使用 super(參數) 來調用父類別的特定建構式

例如:

class Animal {
  String color = "unknow";
  void eat() {
    System.out.println("eating...");
  }
  // 父類別建構式
  Animal(String categoryName) {
    System.out.println("An animal is created.");
    System.out.println("It is a(n) " + categoryName);
  }  
}

class Dog extends Animal {
  String color = "black";
  void doSomething() {
    System.out.println(color); // 子類別的 color 欄位
    System.out.println(super.color); // 取得父類別的 color 欄位
    super.eat(); // 呼叫父類別的方法
  }
  // 子類別建構式
  Dog() {
    super("dog"); // 若無寫此行,編譯器會幫自動新增super()
    System.out.println("Dog is created.");
  }
}

class TestSuper1 {
  public static void main(String args[]) {
    Dog d = new Dog();
    d.doSomething();
  }
}

// output: An animal is created.
// output: It is a(n) dog
// output: Dog is created.
// output: black
// output: unknow
// output: eating...

※如果父類別有「無參數建構式」,且子類別的建構式中沒有明確調用 super(),編譯器會自動在子類別的建構式的第一行插入 super(),隱式地調用父類別的「無參數建構式」。

※若父類別的建構式有參數,而子類別沒有明確呼叫 super 並傳遞參數,此時會發生編譯錯誤,原因在於編譯器自動插入的 super() 不會匹配到任何帶參數的父類別建構式。


上一篇
【Day15】Java - 類別的繼承(一) - 入門
下一篇
【Day17】Java - 抽象類別
系列文
從免費網路資源中入門java30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言